//
//  main.cpp
//  SCsi
//
//  Created by 石超军 on 2018/7/9.
//  Copyright © 2018年 石超军. All rights reserved.
//

#include <iostream>
#include <string>
#include <stack>
class SCsi
{
public:
protected:
    int _Error(int state,std::string desc)
    {
        
        return state;
    }

    
    int _Anaileze(std::string content)
    {
        std::stack<int>   statesStack;   //状态栈
        int state = 0;                   //初始态
        
        char varName[32];   //保存变量名的字符串
        char value[1024];   //保存变量值
        char ch;
        while(true)
        {
            switch(ch)
            {
                case ' ':
                {
                    switch(state)
                    {
                            //case ://取变量名时不要忽略
                        default:break;    //一般情况,忽略空格
                    }
                    
                }
                case '/' :
                {
                    switch(state)
                    {
                        case 01001:{state = 01101;}break; //进入行注释
                        case 01101:break;  //已经在行注释内就不用在判断了
                        case 01201:break;  //已经在块注释内就不用在判断了
                        case 01211:{state = statesStack.top();statesStack.pop();}break; //结束块注释
                        default:{statesStack.push(state);state = 01001;}break;   //无论哪个状态,可能要进入注释态了
                    }
                }break;
                case '*':
                {
                    switch(state)
                    {
                        case 01001:{state = 01201;}break; //进入块注释
                        case 01101:break;    //进入了行注释,
                        case 01201:{state = 01211;}break;
                            
                    }
                }break;
                case '\n':
                {
                    switch(state)
                    {
                        case 01101:{state = statesStack.top();statesStack.pop();}break;
                        case 01201:break;    //进入了块注释,
                        default:{/*TODO:出错*/;}break;
                    }
                }break;
                default:    //注释符外的字符
                {
                    switch(state)
                    {
                        
                        case 01101:break;    //进入了行注释,
                        case 01201:break;    //进入了块注释,
                        case 01211:{state = 01201;}break;//想要结束块注释,其实不是
                          
//                        case 0:{state=02001;}
//
//                        default:
//                        {
//                            switch(state)
//                            {
//                                case 02001: //结构体名录入态
//                                {
//                                    switch (ch)
//                                    {
//                                        case '[':
//                                        {
//
//                                        }break;
//
//
//                                        case '=':
//                                        {
//
//                                        }break;
//                                        default:break;
//                                    }
//                                }break;
//                                case 02002:
//                                {
//                                    switch(ch)
//                                    {
//
//                                    }
//                                }
//                            }
//                        }break;
//
                            
                            
                            
//                        default://注释外的其他状态
//                        {
//                            switch(ch)
//                            {
//                                case '=':
//                                {
//                                    switch(state)
//                                    {
//
//                                        default:{/*TODO:出错*/;}break;
//                                    }
//                                }break;
//                                case '.':
//                                {
//                                    switch(state)
//                                    {
//
//                                        default:{/*TODO:出错*/;}break;
//                                    }
//                                }break;
//                                case '{':
//                                {
//                                    switch(state)
//                                    {
//
//                                        default:{/*TODO:出错*/;}break;
//                                    }
//                                }break;
//                                case '}':
//                                {
//                                    switch(state)
//                                    {
//
//                                        default:{/*TODO:出错*/;}break;
//                                    }
//                                }break;
//                                case '[':
//                                {
//                                    switch(state)
//                                    {
//
//                                        default:{/*TODO:出错*/;}break;
//                                    }
//                                }break;
//                                case ']':
//                                {
//                                    switch(state)
//                                    {
//
//                                        default:{/*TODO:出错*/;}break;
//                                    }
//                                }break;
//                                case ',':
//                                {
//                                    switch(state)
//                                    {
//
//                                        default:{/*TODO:出错*/;}break;
//                                    }
//                                }break;
//                                default: //其他字符
//                                {
//                                    switch(state)
//                                    {
//
//
//                                        default:{/*TODO:出错*/;}break;
//
//                                    }
//                                }break;
//                            }
//
//                        }break;
                    }

                }break;
                    
            }
        }
        return 0;
        
    };

private:

};

int main(int argc, const char * argv[]) {
    // insert code here...
    std::cout << "Hello, World!\n";
    return 0;
}
